#include <c2d2/chien2d2.h>
#include <c2d2/chien2d2lua.h>
#include <c2d2/ator.h>
#include <c2d2/atorlua.h>

enum { SSPRITE };
enum { ESTADO_SPRITE_INICIO = ATOR_PROG_INI };
enum { ANIMA_VIRANDO_SO, ANIMA_VIRANDO_ON, ANIMA_VIRANDO_NL, ANIMA_VIRANDO_LS, ANIMA_VIRANDO_SL, ANIMA_VIRANDO_LN, ANIMA_VIRANDO_NO, ANIMA_VIRANDO_OS,
       ANIMA_ANDANDO_L, ANIMA_ANDANDO_N, ANIMA_ANDANDO_NE, ANIMA_ANDANDO_NO, ANIMA_ANDANDO_S, ANIMA_ANDANDO_SE, ANIMA_ANDANDO_SO, ANIMA_ANDANDO_O,};

C2D2_Mouse *mmouse;
Ator *ssprite;
C2D2_Botao *tteclado;

bool atualizaSprite(Ator *a, unsigned int mapa)
{
	switch(a->estado.estado)
	{
	case ATOR_NASCENDO:
		// Muda para o estado adequado
		ATOR_TrocaEstado(a, ESTADO_SPRITE_INICIO, false);
		break;
	case ESTADO_SPRITE_INICIO:
		if(a->estado.subestado==ESTADO_INICIO)
		{
			ATOR_TrocaAnimacao(a, ANIMA_VIRANDO_SO);
			a->estado.subestado=ESTADO_RODANDO;
		}
	}
	return true;
}

int anim_atual = 0;

int main(int ac, char **av)
{
    CL2_Inicia();

	if(!C2D2_Inicia()) {
		printf("Nao conseguiu iniciar a tela. Encerrando.\n");
		exit(0);
	}

	ATOR_Inicia();

    bool result = ATOR_CarregaAtorEstaticoLua("sprite.lua", &atualizaSprite);
    if(!result) {
		printf("Nao conseguiu carregar o ator.\n");
		exit(0);
	}

    // Cria atores
	ssprite = ATOR_CriaAtor(SSPRITE, 368, 268, 0);

	tteclado = C2D2_PegaTeclas();
	mmouse = C2D2_PegaMouse();

    while(!tteclado[C2D2_ESC].pressionado && !tteclado[C2D2_ENCERRA].pressionado)
	{
	    C2D2_LimpaTela();

		if (tteclado[C2D2_D].pressionado) anim_atual = ++anim_atual % 16;

		if (tteclado[C2D2_A].pressionado) anim_atual = (anim_atual != 0)? --anim_atual : anim_atual;

		if (ssprite->numAnimacao != anim_atual)
			ATOR_TrocaAnimacao(ssprite, anim_atual);

        ATOR_AplicaEstado(ssprite, 0, 800, 600);
		ATOR_Atualiza(ssprite, 0);
		ATOR_Desenha(ssprite, 0, 0, 0);

		C2D2_Sincroniza(C2D2_FPS_PADRAO);
	}

	ATOR_Encerra();
	C2D2_Encerra();
	CL2_Encerra();

	return 0;
}
